如何基于流控策略的优雅退避

您所在的位置:网站首页 java 指数退避重试 如何基于流控策略的优雅退避

如何基于流控策略的优雅退避

2023-12-30 00:04| 来源: 网络整理| 查看: 265

高阶

重试退避策略:基于流控策略下的退避时间计算

开启流控策略的控制能力后,退避时间计算逻辑为:

如果没有触发流控,就一直用EqualJitter计算重试时间间隔;

如果触发了流控,则取流控剩余时间和 EqualJitter 计算结果的最大值做时间间隔,时间如果大于最大重试时间间隔的限制,则直接抛异常,并且将流控剩余时间记录在缓存池中,以供流控静默策略使用。

流控静默策略

开启流控策略的控制能力后,当触发流控限制,服务端则会在返回头(Header)中返回流控剩余的 quota 信息,即针对【用户】维度、【API + 用户】维度,返回给客户端以下信息:API 调用剩余次数、限流剩余时间等。其中当被限流时,API 调用剩余次数则为 0。

说明

两个维度在 Header 中对应的 Key 值为:

【API + 用户】维度X-RateLimit-User-API

【用户】维度:X-RateLimit-User

针对【API + 用户】维度举例说明:

"X-RateLimit-User-API" : "Remain:1,Limit:2,Time:1000,TimeLeft:122,Reset:1637835220000"

Remain:剩余量,int 类型,如果为 -1,则表示剩余量足够;如果已经被流控,则返回0;

Limit:流控的阈值上限,int 类型 Time:流控的时间跨度,long 类型,单位毫秒 TimeLeft:本流控周期剩余时间,long 类型,单位毫秒 Reset:流控下一次周期开始时间,long 类型,毫秒时间戳

而 SDK 会对流控剩余时间进行管理,在这个时间段里,若发起调用或者重试调用将会受到限制,如果这个时间大于最大重试间隔时间,则直接抛错,若不大于最大间隔重试时间,则会静默等待直到允许发起调用或重试。

开启流控调试

在能力开启的条件下,除了遇到流控限制的情况会返回 Header 中的流控剩余的 quota 信息外,还可以在正常调用时要求返回该 quota 信息,只需要在请求头中加 X-RateLimit-Mode 字段值为 debug 即可:

request.putHeadParameter("X-RateLimit-Mode", "debug");

这样就会在每次接口调用的返回头中拿到剩余 quota 信息。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3